<?php

namespace Topxia\Service\File\Impl;

use Symfony\Component\HttpFoundation\File\UploadedFile;
use Topxia\Service\Common\BaseService;
use Topxia\Service\File\FileImplementor;
use Topxia\Common\FileToolkit;
use Topxia\Common\ArrayToolkit;


class QiniuFileImplementorImpl extends BaseService implements FileImplementor
{
    public function addFile($targetType, $targetId, $originalFile)
    {

        $errors = FileToolkit::validateFileExtension($originalFile);
        if ($errors) {
            @unlink($originalFile->getRealPath());
            throw $this->createServiceException("该文件格式，不允许上传。");
        }

        $uploadFile = array();

        $time = time();

        $uploadFile['storage'] = 'local';
        $uploadFile['targetId'] = $targetId;
        $uploadFile['targetType'] = $targetType;

        $uploadFile['filename'] = $originalFile->getClientOriginalName();

        //$uploadFile['filename'] = $time.$uploadFile['filename'];

        $uploadFile['ext'] =  FileToolkit::getFileExtension($originalFile);
        $uploadFile['size'] = $originalFile->getSize();

        $filename = FileToolkit::generateFilename($uploadFile['ext']);
        
        $uploadFile['hashId'] = "{$uploadFile['targetType']}/{$uploadFile['targetId']}/{$filename}";

        $uploadFile['convertHash'] = "ch-{$uploadFile['hashId']}";
        $uploadFile['convertStatus'] = 'none';

        $uploadFile['type'] = FileToolkit::getFileTypeByExtension($uploadFile['ext']);

        $uploadFile['isPublic'] = empty($fileInfo['isPublic']) ? 0 : 1;
        $uploadFile['canDownload'] = empty($uploadFile['canDownload']) ? 0 : 1;

        $uploadFile['updatedUserId'] = $uploadFile['createdUserId'] = $this->getCurrentUser()->id;
        $uploadFile['updatedTime'] = $uploadFile['createdTime'] = time();

        //$uploadFile['filePath'] = $this->getFilePath();

        //throw new \RuntimeException(print_r('ssd'));
        //throw $this->createServiceException(print_r('ssd'));

        //$key = $uploadFile['filename'];

        //qiniu();

        //转存上传临时文件到资源文件夹(由于业务服务器硬盘较小,故不作备份，直接上传到七牛云。如需开启则删除下面注释符) 以下代码未包含删备份
        $targetPath = $this->getFilePath($targetType, $targetId, $uploadFile['isPublic']);
        $originalFile->move($targetPath, $filename);

        //todo 上传到七牛处理代码（存储、转码、拼接、水印）20151224
        //$config = $this->getQiniuService()->initQiniu($targetPath,$filename);

        return $uploadFile;
    }
}